#pragma once

#include <iostream>

struct Product
{
    virtual ~Product() = default;
    virtual void show() = 0;
};

struct GameProduct : public Product
{
    GameProduct()
    {
        std::cout << "[DEBUG]: Create Game Product" << std::endl;
    }
    void show() override
    {
        std::cout << "[DEBUG]: calling [ ConcreteProduct::show() ]" << std::endl;
    }
};

// TODO: more product type to be added
// PhoneProduct, ...